package com.jintian.smart.kernel.core.flow;

public interface IFlowEventListener<T> {
	void bindProcessContext(IProcessContext<T> context);

	void unbindProcessContext();

	IProcessContext<T> getProcessContext();

	default void before() {
		this.before(this.getProcessContext());
	}

	/**
	 * <pre>
	 * 业务动作执行前触发，可用于：<br>
	 * 1.设置流程图中表达式使用的变量值<br>
	 * 2.检查业务条件<br>
	 * 3.扩展的流程引擎控制变量<br>
	 * </pre>
	 * 
	 * @param context
	 */
	void before(IProcessContext<T> context);

	default void after() {
		this.after(this.getProcessContext());
	}

	/**
	 * <pre>
	 * 业务动作执行后触发，可用于：<br>
	 * 1.更新业务数据，例如过程表数据同步到成果表<br>
	 * 2.其他业务逻辑br>
	 * </pre>
	 * 
	 * @param context
	 */
	void after(IProcessContext<T> context);

	/**
	 * 优先级，数字小的先执行
	 * 
	 * @return
	 */
	default int priority() {
		return 0;
	}

}
